#include <stdio.h>

#define MAX_LEN 10

static void helix_matrix(int a[MAX_LEN][MAX_LEN], int n)
{
    int m; // 圈数
    int i;
    int j;
    int k = 0;

    if(n % 2 == 0) // 偶数阶螺旋方阵
        m = n / 2;
    else // 奇数阶螺旋方阵
        m = n / 2 + 1;
    for(i = 0; i < m; i++)
    {
        // 产生该圈上横行的数字
        for(j = i; j < n - i; j++)
        {
            k++;
            a[i][j] = k;
        }
        // 产生该圈右竖行的数字
        for(j = i + 1; j < n - i; j++)
        {
            k++;
            a[j][n - i - 1] = k;
        }
        // 产生该圈下横行的数字
        for(j = n - i - 2; j >= i; j--)
        {
            k++;
            a[n - i - 1][j] = k;
        }
        // 产生该圈左竖行的数字
        for(j = n - i - 2; j >= i + 1; j--)
        {
            k++;
            a[j][i] = k;
        }
    }
}

int main(void)
{
    int n, i, j;
    int a[MAX_LEN][MAX_LEN];

    printf("输入n(n<10):");
    scanf("%d", &n);
    helix_matrix(a, n);
    printf("%d阶数字方阵如下:\n", n);

    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
        {
            printf("%4d", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}